package com.campus.counseling.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.campus.counseling.entity.TestQuestion;
import com.campus.counseling.model.dto.TestQuestionDTO;
import com.campus.counseling.model.query.TestQuestionQuery;
import com.campus.counseling.model.vo.TestQuestionVO;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 测试题目服务接口
 */
public interface TestQuestionService extends IService<TestQuestion> {

    /**
     * 分页查询题目列表
     * @param query 查询条件
     * @return 分页结果
     */
    Page<TestQuestionVO> list(TestQuestionQuery query);

    /**
     * 根据ID获取题目
     * @param id 题目ID
     * @return 题目信息
     */
    TestQuestionVO getQuestion(Long id);

    /**
     * 添加测试题目
     * @param dto 题目信息
     */
    void add(TestQuestionDTO dto);

    /**
     * 更新测试题目
     * @param id 题目ID
     * @param dto 题目信息
     */
    void update(Long id, TestQuestionDTO dto);

    /**
     * 删除测试题目
     * @param id 题目ID
     */
    void delete(Long id);

    /**
     * 根据维度获取题目列表
     * @param testId 测试ID
     * @param dimension 维度
     * @return 题目列表
     */
    List<TestQuestionVO> getQuestionsByDimension(Long testId, String dimension);

    /**
     * 获取测试的维度问题统计
     * @param testId 测试ID
     * @return 维度问题数量统计（维度 -> 问题数量）
     */
    Map<String, Integer> getDimensionQuestionCount(Long testId);

    /**
     * 创建测试题目
     * @param dto 题目信息
     * @return 题目ID
     */
    Long createQuestion(TestQuestionDTO dto);

    /**
     * 更新测试题目
     * @param id 题目ID
     * @param dto 题目信息
     * @return 是否更新成功
     */
    boolean updateQuestion(Long id, TestQuestionDTO dto);

    /**
     * 删除测试题目
     * @param id 题目ID
     * @return 是否删除成功
     */
    boolean deleteQuestion(Long id);

    /**
     * 批量删除测试题目
     * @param ids 题目ID列表
     * @return 是否删除成功
     */
    boolean batchDeleteQuestions(List<Long> ids);

    /**
     * 根据ID获取题目
     * @param id 题目ID
     * @return 题目信息
     */
    TestQuestionVO getQuestionById(Long id);

    /**
     * 根据测试ID获取题目列表
     * @param testId 测试ID
     * @return 题目列表
     */
    List<TestQuestionVO> getQuestionsByTestId(Long testId);

    /**
     * 批量创建题目
     * @param questions 题目列表
     * @return 是否创建成功
     */
    boolean batchCreateQuestions(List<TestQuestionDTO> questions);

    /**
     * 批量导入题目
     * @param file Excel文件
     * @param testId 测试ID
     * @throws Exception 导入异常
     */
    void importQuestions(MultipartFile file, Long testId) throws Exception;
} 